package com.example.alibabavodossservice.vod.snapshots;

import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.vod.model.v20170321.*;
import com.example.alibabavodossservice.vod.snapshots.SnapshotJobParameter;
import org.springframework.beans.BeanUtils;

import java.util.List;

import static com.example.alibabavodossservice.vod.InitVODConstants.VOD_CLIENT;


public class Cmd {

    /**
     * 提交媒体截图处理作业
     *  暂时只支持生成JPG格式的图片
     *  截图完成会产生EventType=SnapshotComplete,SubType=SpecifiedTime的视频截图完成的事件通知
     * @return SubmitSnapshotJobResponse 提交媒体截图处理作业响应数据
     * @throws Exception
     */
    public static SubmitSnapshotJobResponse submitSnapshotJob(SnapshotJobParameter snapshotJobParameter) throws Exception {
        SubmitSnapshotJobRequest snapshotJobRequest = new SubmitSnapshotJobRequest();
        BeanUtils.copyProperties(snapshotJobParameter, snapshotJobRequest);
        JSONObject spriteSnapshotConfig = buildSnapshotTemplateConfig();
        snapshotJobRequest.setSpriteSnapshotConfig(spriteSnapshotConfig.toJSONString());
        return VOD_CLIENT.getAcsResponse(snapshotJobRequest);
    }

    /**
     * 构建雪碧图截图配置
     *
     * @return JSONObject 雪碧图截图配置
     */
    public static JSONObject buildSnapshotTemplateConfig() {
        JSONObject spriteSnapshotConfig = new JSONObject();
        spriteSnapshotConfig.put("CellWidth", "120");
        spriteSnapshotConfig.put("CellHeight", "68");
        spriteSnapshotConfig.put("Columns", "3");
        spriteSnapshotConfig.put("Lines", "10");
        spriteSnapshotConfig.put("Padding", "20");
        spriteSnapshotConfig.put("Margin", "50");
        //保留雪碧图原始图
        spriteSnapshotConfig.put("KeepCellPic", "keep");
        spriteSnapshotConfig.put("Color", "tomato");
        return spriteSnapshotConfig;
    }


    /**
     * 查询截图数据
     * 如有多次视频截图，则返回最近一次成功的截图数据。
     *
     * @param searchListSnapshotsParameter 查询参数
     * @throws Exception 异常
     */
    public static ListSnapshotsResponse.MediaSnapshot GetSnapshots(SearchListSnapshotsParameter searchListSnapshotsParameter) throws Exception {
        // 查询媒体截图数据
        ListSnapshotsRequest listSnapshotsRequest = new ListSnapshotsRequest();
        BeanUtils.copyProperties(searchListSnapshotsParameter, listSnapshotsRequest);
        ListSnapshotsResponse listSnapshotsResponse = VOD_CLIENT.getAcsResponse(listSnapshotsRequest);
        return listSnapshotsResponse.getMediaSnapshot();

    }


    /**
     * 添加截图模板函数
     *
     * @param vodTemplateParameter 模板参数
     * @return AddVodTemplateResponse 添加截图模板响应数据
     * @throws Exception 异常
     */
    public static AddVodTemplateResponse addSnapshotVodTemplate(VodTemplateParameter vodTemplateParameter) throws Exception {
        AddVodTemplateRequest addVodTemplateRequest = new AddVodTemplateRequest();
        JSONObject templateConfig = buildSnapshotTemplateConfig();
        addVodTemplateRequest.setTemplateConfig(templateConfig.toJSONString());
        BeanUtils.copyProperties(vodTemplateParameter, addVodTemplateRequest);
        return VOD_CLIENT.getAcsResponse(addVodTemplateRequest);
    }

    /**
     * 修改截图模板函数
     *
     * @param vodTemplateParameter 模板参数
     * @return UpdateVodTemplateResponse 修改截图模板响应数据
     * @throws Exception 异常
     */
    public static UpdateVodTemplateResponse updateSnapshotVodTemplate(VodTemplateParameter vodTemplateParameter) throws Exception {
        UpdateVodTemplateRequest updateVodTemplateRequest = new UpdateVodTemplateRequest();
        BeanUtils.copyProperties(vodTemplateParameter, updateVodTemplateRequest);
        JSONObject templateConfig = buildSnapshotTemplateConfig();
        updateVodTemplateRequest.setTemplateConfig(templateConfig.toJSONString());
        return VOD_CLIENT.getAcsResponse(updateVodTemplateRequest);
    }

    /**
     * 查询截图模板配置数据
     *
     * @param vodTemplateId 模板ID
     * @return GetVodTemplateResponse.VodTemplateInfo 模板信息
     * @throws Exception 异常
     */
    public static GetVodTemplateResponse.VodTemplateInfo getSnapshotVodTemplate(String vodTemplateId) throws Exception {
        GetVodTemplateRequest getVodTemplateRequest = new GetVodTemplateRequest();
        getVodTemplateRequest.setVodTemplateId(vodTemplateId);
        return VOD_CLIENT.getAcsResponse(getVodTemplateRequest).getVodTemplateInfo();
    }

    /**
     * 查询截图模板配置数据列表
     * setTemplateType("Snapshot")固定值
     *
     * @param appId 应用ID
     * @return List<ListVodTemplateResponse.VodTemplateInfo> 模板信息列表
     * @throws Exception 异常
     */
    public static List<ListVodTemplateResponse.VodTemplateInfo> getSnapshotVodTemplateList(String appId) throws Exception {
        ListVodTemplateRequest listVodTemplateRequest = new ListVodTemplateRequest();
        listVodTemplateRequest.setAppId(appId);
        listVodTemplateRequest.setTemplateType("Snapshot");
        ListVodTemplateResponse listVodTemplateResponse = VOD_CLIENT.getAcsResponse(listVodTemplateRequest);
        return listVodTemplateResponse.getVodTemplateInfoList();
    }

    /**
     * 删除截图模板
     *
     * @param vodTemplateId 模板ID
     * @throws Exception 异常
     */
    public static void deleteSnapshotVodTemplate(String vodTemplateId) throws Exception {
        DeleteVodTemplateRequest deleteVodTemplateRequest = new DeleteVodTemplateRequest();
        deleteVodTemplateRequest.setVodTemplateId(vodTemplateId);
        VOD_CLIENT.getAcsResponse(deleteVodTemplateRequest);
    }




}
